--- title: "烤鸡" created: 2025-11-28 tags: - 算法 --- # 烤鸡 ## 题目 [烤鸡](https://www.luogu.com.cn/problem/P2089) ![[image-0378ac72.png]] ## 思路分析 ![[image-eeafb518.png]] 首先朴素做法就是 每一种调料对应每一位 每位都有1 2 3 三种选法 某种方案达到10的时候 说明10种调料都选择完毕了 结束本次递归 ```typescript #include using namespace std; const int N=20; int plans[N]; //1表示放一克 2表示放两克 3表示放三克 int n; int res; vector> ans; void dfs(int u){ if(u>10){ int sum=0; for(int i=1;i<=10;i++) sum+=plans[i]; if(sum==n){ ans.push_back(vector(plans + 1, plans + 11)); res++; } return; } plans[u]=1; dfs(u+1); plans[u]=0; plans[u]=2; dfs(u+1); plans[u]=0; plans[u]=3; dfs(u+1); plans[u]=0; } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; dfs(1); cout< using namespace std; const int N=20; int plans[N]; //1表示放一克 2表示放两克 3表示放三克 int n; int res; vector> ans; void dfs(int u,int sum){ if(sum>n) return; if(u>10){ if(sum==n){ ans.push_back(vector(plans + 1, plans + 11)); res++; } return; } for(int i=1;i<=3;i++){ plans[u]=i; dfs(u+1,sum+i); plans[u]=0; } } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; dfs(1,0); cout< using namespace std; const int N=5010; int path[N]; int n,res; vector> ans; void dfs(int u){ if(u>10){ int sum=0; for(int i=1;i<=10;i++){ sum+=path[i]; } if(sum==n){ res++; ans.push_back(vector(path+1,path+10+1)); } return; } for(int i=1;i<=3;i++){ path[u]=i; dfs(u+1); path[u]=0; } } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; dfs(1); cout< using namespace std; const int N=5010; int path[N]; int n,res; vector> ans; void dfs(int u,int sum){ if(sum>n) return; if(u>10){ if(sum==n){ res++; ans.push_back(vector(path+1,path+10+1)); } return; } for(int i=1;i<=3;i++){ path[u]=i; dfs(u+1,sum+i); path[u]=0; } } int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; dfs(1,0); cout<